package cn.choujay.tlias.aop;


import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

//设置为切面类

@Aspect
@Component
@Slf4j
public class TimeAspect {

    /**
     * 连接点: joinPoint，可以被AOP控制的方法
     * 连接点指的是可以被aop控制的方法，例如：入门程序当中所有的业务方法都可以被aop空置的方法
     * 通知: Advice 指哪些重复的逻辑，也就是共性的功能 最终体现为一个方法
     * 切入点：PointCut,匹配连接点的条件，通知仅会在切入点方法执行时被调用
     * @param proceedingJoinPoint
     * @return
     * @throws Throwable
     */

    @Around("execution(* cn.choujay.tlias.service.*.*(..))")
    public Object recordTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        long startTime = System.currentTimeMillis();
        Object proceed = proceedingJoinPoint.proceed();
        long endTime = System.currentTimeMillis();
        log.info("运行时间为：{}ms", (endTime - startTime));
        return proceed;
    }

}
